//同以目录下的文件更名：
const fs = require("fs");
const path = require("path");
const os = require("os");
const { addAbortSignal } = require("stream");
const { start } = require("repl");
// 包含当前文件夹所有内容的数组
let allFiles = fs.readdirSync(__dirname);
// 更名操作
function my_rename(oldName, newName) {
    fs.rename(oldName, newName, function (err) {
        if (err) {
            throw err;
        }

        // console.log("rename is done!");
    });
}
// 验证结尾后缀是否为真。str文件的名字。appoint文件后缀的名字
function my_validationEnd(str, appoint) {
    // 不区分大小写全部转换成小写。
    str = str.toLowerCase();
    let tempArr = str.split(".");
    let endStr = tempArr[tempArr.length - 1];
    if (appoint === endStr) {
        return true;
    }
    return false;
}
// 过滤数组的方法，返回我想要的文件类型的数组。第一个参数文件数组。第二个参数后缀名，字符串。
function type_arr(arr, typeStr) {
    let newArr = [];
    for (let i in arr) {
        if (my_validationEnd(arr[i], typeStr)) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

// 把a00b.txt更名为a-b.txt
function my_rename_to_h265(fileType, suffix) {
    // 所有该格式文件的数组 只剩下mkv视频的文件数组
    let typeArray = type_arr(allFiles, fileType);
    typeArray.forEach((element) => {
        if (element.toLowerCase().indexOf('h265') !== -1) {
            return;
        }
        // aaa.bbb.ccc.mkv
        let lastPointIndex = element.lastIndexOf('.')
        let startStr = element.slice(0, lastPointIndex)
        // 包含.
        let endStr = element.slice(lastPointIndex)
        // console.log(startStr,endStr);
        // let tempStrArr = element.split('.')
        // my_rename(element, element + ' ' + suffix + '.' + tempStrArr[tempStrArr.length - 1])
        my_rename(element, startStr + ' ' + suffix + endStr)

    });
    console.log("已经重命名成" + suffix + "!");
}
// my_rename_to_h265('mkv', 'h265')
// 打印这个类型的数组
function my_console_arr(fileType = 'txt') {
    let typeArray = type_arr(allFiles, fileType);
    return typeArray
}

// 判断是否文件夹
function my_isFold(fileOrFoldName) {
    return fs.lstatSync(fileOrFoldName).isDirectory()
}
// console.log(my_isFold('0.ass'));
// 获取文件的大小名字类型信息
function get_fileMsg(file) {
    let msg = fs.statSync(file)
    // console.log('msg', msg.size);
    return {
        name: file,
        size: msg.size//8087
    }
}
// __dirname转义路径名字
function my_trans_pathname(originalName) {
    let temp = originalName.split('\\')
    // console.log(temp);
     temp = temp.join('\\\\')
    return temp
    // console.log(temp2);
}
console.log(my_isFold('E:\\projects\\node_practice\\script-jiaoBen\\test\\新建文件夹'));
my_appendFile('新建文件夹\\文件列表数组.txt','E:\\projects\\node_practice\\script-jiaoBen\\test\\新建文件夹')
//第一个参数添加到信息的文件，第二个读取的文件夹
function my_appendFile(newFile, filePath = __dirname) {
    let allFiles2 = fs.readdirSync(filePath);
    let allFilesArr = []
    // 路径名字和文件名字 对象数组
    let filesObjArr=[]
    // let allFilesArrStr = ''
    let count = 0
    let newFilePath=''
    // console.log(allFiles, '<=allFiles');//文件夹也在里面
    //   console.log("我要的格式的数组", typeArray);
    /* let test=my_readFileSync('read.js')
    console.log(56,my_readFileSync('test.txt'));return; */
    // console.log('arrFiles',allFiles);
    // return
    allFiles2.forEach(item => {
        console.log('item=>',filePath+'\\'+item);
        // 这个地方总是报错
        if (my_isFold(filePath+'\\'+item)) {
            // return
            // 是文件夹
            // 新路径名字
            // 每次自己调用自己都会计数增加
            count++
            // console.log(count);
            // return
            newFilePath = my_trans_pathname(__dirname + '\\' + item);
            /* for (let i = 0; i < count; i++) {
            } */
            // console.log(newFile, my_trans_pathname(newFilePath));//文件列表数组.txt E:\projects\node_practice\script-jiaoBen\test\f
            console.log('124路径名',item+'/'+newFile,newFilePath);//新建文件夹/文件列表数组.txt E:\\projects\\node_practice\\script-jiaoBen\\test\\新建文件夹
            // console.log('E:\\projects\\node_practice\\script-jiaoBen\\test\\新建文件夹');
            // my_appendFile('新建文件夹\\文件列表数组.txt','E:\\projects\\node_practice\\script-jiaoBen\\test\\新建文件夹')
            console.log(124,item+'/'+newFile,newFilePath);
            my_appendFile(item+'/'+newFile,newFilePath)
            // return
        } else {
            // 是文件
            allFilesArr.push(item)
        }
    })
    allFilesArr=[{}]
    console.log('allFilesArrAndPath', allFilesArr,newFilePath);
    return
    let msgArr=[]
    allFilesArr.forEach(item=>{
        // item是每一个文件
        // console.log(135,filePath+'\\'+item);
        // return
        if(item===newFile)return true
        console.log(138,item);//新建文件夹.txt\新建文件夹\文件列表数组.txt
        console.log(139,get_fileMsg(item));
        return
        msgArr.push(get_fileMsg(item+'\\'+newFile))
    })
    console.log(140,msgArr,count);
    return
    fs.appendFileSync(item+'/'+newFile, JSON.stringify(msgArr))
    console.log("已经将所有该格式所有文件内容复制到一个文件中！");
    return 
    for (let i in typeArray) {
        // 比如要把所有js文件放到newFile.js文件里面。那么要排除它本身
        if (typeArray[i] === newFile) continue;
        //把内容追加进去
        //fs.appendFileSync(newFile, my_readFileSync(typeArray[i]) + os.EOL);
        //把文件名字追加到新文件里面
        // fs.appendFileSync(newFile, typeArray[i])
        // allFilesArr.push(typeArray[i])
        // 覆盖写入。举个例子，这里的场景不能覆盖，必须追加
        // fs.writeFileSync('message.txt', 'Hello Node');
        // 对象数组的方式
        //  console.log(get_fileMsg(file));
        allFilesArr.push(get_fileMsg(typeArray[i]))
    }
    console.log('all', allFilesArr);
    // fs.writeFileSync(newFile, ''+allFilesArr)//这种方法不行 [object Object],[object Object],[object Object]
    console.log(JSON.stringify(allFilesArr));
    // return;
    fs.appendFileSync(newFile, JSON.stringify(allFilesArr))
    console.log("已经将所有该格式所有文件内容复制到一个文件中！");
    /* allFilesArr.forEach((file,index)=>{
        // 换行符，文本的方式
        // allFilesArrStr+=''+[index+1]+'.'+file+'\r\n'
    }) */

}
// my_appendFile('test333.txt','js')
my_appendFile("文件列表数组.txt", __dirname);

